Program debugging, or debugging, is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware to make the computer program behave as expected. Debugging in general is a lengthy, tiresome task, and programmers often use a software tool such as a debugger operating on a debuggee process to monitor execution of the computer program and to perform program debugging. During investigation of the program, the programmer may stop the execution of the debuggee process, collect data values, or otherwise affect the execution of the debuggee process based on the values of the variables.
Debugging technologies often struggle to keep up with improvements in development technologies. Software development technologies have advanced to provide many developers with additional tools to readily create programs with rich user experiences adapted for multiple platforms and systems with customization for selected user groups in ways once only available to the most advanced developers. Many of these development technologies have made traditional debugging processes more difficult for a number of reasons. Thus, software developers are often caught in a conundrum of whether to implement new software utilizing development technologies that entail significant debugging costs and potentially compromise the ability to quickly bring products to consumers.